package com.wjs.mapper;

import com.wjs.entity.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

@Mapper
public interface UserMapper {
    /**
     * 根据用户名获取用户信息
     *
     * @param username 用户名
     * @return 用户对象，如果用户名不存在则返回null
     */
    @Select("SELECT * FROM users WHERE username = #{username}")
    User getByUsername(String username);

    /**
     * 插入新用户
     *
     * @param user 用户对象
     */
    @Insert("INSERT INTO users (username, real_name, password, avatar_url, phone_number, email) VALUES (#{username}, #{realName}, #{password}, #{avatarUrl}, #{phoneNumber}, #{email})")
    void insert(User user);

    /**
     * 更新用户信息
     *
     * @param user 包含更新信息的User对象
     * @return 受影响的行数
     */
    @Update("UPDATE users SET username = #{username}, password = #{password}, avatar_url = #{avatarUrl}, phone_number = #{phoneNumber}, email = #{email} WHERE real_name = #{realName}")
    int update(User user);

    /**
     * 根据用户名获取用户信息
     *
     * @param name 用户名
     * @return 用户对象，如果用户名不存在则返回null
     */
    @Select("SELECT * FROM users WHERE real_name = #{name}")
    User getByName(String name);

    /**
     * 忘记密码，根据用户名和邮箱修改密码
     *
     * @param user 包含用户名和邮箱的User对象
     * @return 受影响的行数
     */
    @Update("UPDATE users SET password = #{password} WHERE username = #{username} AND email = #{email}")
    int forgotPassword(User user);
}
